#ifndef __XMLPARSER_H__
# define __XMLPARSER_H_

#include <iostream>

#include "XMLNode.hpp"
#include "XMLException.h"

class XMLParser
{
	public:
		XMLParser();
		~XMLParser();

	protected:
		virtual  void	startElement(XMLNode* node) = 0;
		virtual  void	endElement(XMLNode* node) = 0;
		virtual  void	dataElement(std::string data) = 0;
		virtual  void	parseError(XMLException e) = 0;

	public:
		void	startParsing();
		void	setContent(const char* path);
		void	setContent(const std::string& ptr);

	private:
		void	getNextNode();
		void	getClosedNode();
		void	getComment();
		void	getXmlDeclaration();
		void	getNode();
        void    getData(int);

	private:
		XMLNode			*currentNode;
		std::string		buffer;
		int				currPos;
		int				size;
		bool            inNode;
};

#endif
